package demo03;

import java.io.File;

/*
 *  File类的遍历功能相关方法：
 *      public String[] list()：返回一个String数组，表示该File目录中的所有子文件或目录
 *      public File[] listFiles()：返回一个File数组，表示该File目录中的所有的子文件或目录
 *  注意：list方法和listFiles方法获取的是构造方法中给出的目录
 *      1. 如果构造方法中的目录路径不存在，方法会返回null，继续进行遍历则会抛出空指针异常
 *      2. 如果构造方法中给出的路径不是一个目录，方法会返回null，继续进行遍历也会抛出空指针异常
 *      3. 两种方法获取目录下的文件时，都能获取到隐藏文件
 */
public class Demo06File {
    public static void main(String[] args) {
        File file = new File("file");

        /*
         *  public String[] list()：返回一个String数组，表示该File目录中的所有子文件或目录
         *      遍历构造方法中给出的目录，获取目录中的所有文件/文件夹的名称，将获取到的名称存储到一个String类的数组中
         */
        System.out.println(new File("f").list()); // null，目录路径不存在
        System.out.println(new File("file\\a.txt").list()); // null，获取到的是文件而非目录
        for (String fileName : file.list()) {
            System.out.println(fileName);
            /*
             *  输出结果：
             *  A
             *  a.txt
             *  B
             *  隐藏文件.txt
             *  隐藏文件夹
             */
        }

        /*
         *  public File[] listFiles()：返回一个File数组，表示该File目录中的所有的子文件或目录
         *      遍历构造方法中给出的目录，获取目录中的所有文件/文件夹，将这些文件/文件夹封装为File类对象，并存储到一个File类的数组中
         */
        System.out.println(new File("f").listFiles()); // null，目录路径不存在
        System.out.println(new File("file\\a.txt").listFiles()); // null，获取到的是文件而非目录
        for (File fileName : file.listFiles()) {
            System.out.println(fileName.getAbsolutePath()); // 打印绝对路径
            /*
             *  输出结果：
             *  D:\code\ameri_-java\Java_code\day18\file\A
             *  D:\code\ameri_-java\Java_code\day18\file\a.txt
             *  D:\code\ameri_-java\Java_code\day18\file\B
             *  D:\code\ameri_-java\Java_code\day18\file\隐藏文件.txt
             *  D:\code\ameri_-java\Java_code\day18\file\隐藏文件夹
             */
        }
    }
}
